package design.singleton.lazy;

/**
 * 双重检查锁单例模式
 * 懒汉式
 * 线程安全
 * 第一重锁保证效率
 * 第二重锁保证不会重复生成对象
 */
public class DCLSingleton {
    private static volatile DCLSingleton singleton;
    private DCLSingleton() {}

    public DCLSingleton getInstance() {
        if(singleton == null) {
            synchronized (this) {
                if(singleton == null) {
                    singleton = new DCLSingleton();
                }
            }
        }
        return singleton;
    }
}
